// Class defines the properties of a photon.
#ifndef PHOTON_H
#define PHOTON_H

#include <iostream>
using namespace std;

class Photon 
{
private:
	// Location of the photon.
	double x, y, z;

	// Direction of the photon.
	double dirx, diry, dirz;

	// Weight of the photon.
	double weight;

	// Step size for the photon.
	double step;
	
	// 1-> alive, 0->dead
	int status;
	

public:
	Photon(void);
	Photon(int x, int y, int z,
		   int dirx, int diry, int dirz);
	~Photon(void);

	// Return the cartesian coordinates
	double getX(void) {return x;}
	double getY(void) {return y;}
	double getZ(void) {return z;}

	// Return the direction cosines
	double getDirX(void) {return dirx;}
	double getDirY(void) {return diry;}
	double getDirZ(void) {return dirz;}

	// Return the current weight of the photon
	double getWeight(void) {return weight;}
	
	// Return the status of the photon.
	int getStatus(void) {return status;}

	// Calculate the new location of the photon and
	// move it to those coordinates.
	void updateLocation(void);
	
	// Update weight based on specular reflectance.
	void specular(double n1, double n2);
}; 		

#endif // end PHOTON_H
